package java19_1_21_exception;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

/**
 * @author yuisama
 * @date 2022/01/21 09:08
 **/
class CloseTest implements AutoCloseable {
    @Override
    public void close() throws Exception {
        System.out.println("close方法正常执行结束。。。");
    }
}
public class ExceptionTest {
    public static void main(String[] args) {

//        try(CloseTest closeTest = new CloseTest()) {
//
//        }catch (Exception e) {
//
//        }
//        int[] arr = {10,20,30};
//        try {
////            arr = null;
//            // 假设此时有可能会出现10种不同可能的异常
//            System.out.println(arr[100]);
//            System.out.println("异常之后的代码");
//        }catch (ArrayIndexOutOfBoundsException e) {
//            // 此处的e就是异常对象，默认是由JVM产生传递给catch代码段
//            System.out.println("数组越界了!");
//            // printStackTrace()打印错误堆栈信息 - 错误开始的位置
//            e.printStackTrace();
//        } finally {
//            // 无论上述代码是否产生异常，都会执行
//            System.out.println("finally代码块的代码!");
//        }
//        // File是Java中文件操作类
//        File file = new File("test.txt");
//        // 输入，不是从键盘输入，将文件内容输入到Scanner中
//        Scanner scanner = null;
//        try {
//            scanner = new Scanner(file);
//            System.out.println("文件正确加载完毕");
//        }catch (FileNotFoundException e) {
//            System.out.println("文件不存在!");
//            e.printStackTrace();
//        }finally {
//            // 最终所有业务执行后，要最后处理的代码
//            System.out.println("文件正常处理完毕");
//        }
        // 此时main也没有进行异常处理
//        exceptionChain();

//        }catch (ArrayIndexOutOfBoundsException e) {
//            System.out.println("越界异常");
//            e.printStackTrace();
//        }
    }
    public static void exceptionChain() {
        int[] arr = new int[3];
        // 产生越界异常，但是此方法中没有处理，就很将此异常抛出给调用者
        System.out.println(arr[10]);
    }

    public static int testException() {
        try {
            String str = null;
            System.out.println(str.equals("123"));
            return 1;
        }catch (NullPointerException e) {
            return 2;
        }finally {
            System.out.println("finally中的代码段");
            return 3;
        }
    }
}